Postman 快速入门之脚本语法

您所在的位置:网站首页 test scripts Postman 快速入门之脚本语法

Postman 快速入门之脚本语法

#Postman 快速入门之脚本语法| 来源: 网络整理| 查看: 265

Postman是访问各种API的客户端。它的强大之处在于其允许在对某一个request访问的之前和之后分别运行自定义的一段Javascript脚本,这样直接就完成了一个chain request的效果,可以将数条request连结成一个流程完成一体化测试。这在很多的API操作中都是极其有用的,所以这里有必要总结一些常用语句。

参考postman官方:Intro to scripts

Script workflow 脚本执行流程

在这里插入图片描述 collection pre-request script -> folder pre-request script -> request pre-request script -> collection test -> folder test script -> request pre-request test

pre-request脚本,是在对API进行请求之前的脚本,一般用于动态生成参数、JSON数据包、链接地址等。test脚本,其实更应该叫post-request,实在完成API访问并得到其response回应之后运行的脚本,一般用于获取response的内容,用于之后对于别的资源的请求,如获取页面标题和内容等。 Requirements 运行脚本要求

需要注意,pre-request脚本,在里面直接写代码就可以了,但是test脚本需要在某个指定的函数pm.test(…)中执行才会被识别,且作为test脚本运行。如下图: 在这里插入图片描述 pm.test()中第一个参数是测试描述(会在测试结果栏显示,应和其它测试描述做以区分),第二个参数是一个函数,具体执行代码都在这个函数中运行。 另外,pm对象是Postman的主要对象,所有的内置函数,数据调用等,都需要通过它来实现。 在这里插入图片描述

Code Snippets 常用语句

一般会在脚本编写栏的右边都会有常用语句片段,点击以下就会出来代码,但是一开始不太了解的话点出来其实也看不懂。如下图: 在这里插入图片描述官方文档解释的各种函数调用链接在这里:Postman Sandbox API

以下是常用代码片段:

// 获取response返回内容 var res = responseBody; // 是字符串格式 // 获取环境变量 var v = pm.environment.get("variable_key"); // 获取全局变量 var gb = pm.globals.get("variable_key"); // 获取普通变量 var nm = pm.variables.get("variable_key"); // 设置环境变量 // 只能存储字符串,如果是对象的话则无法在下次运行时获取到内容 // 如需要存储JSON数据,可以用JSON.stringify(..)存储,再用JSON.parse(..)转化为对象使用 pm.environment.set("variable_key", variable_value); // 设置全局变量 pm.globals.set("variable_key", "variable_value"); // 清除某个环境变量 pm.environment.unset("variable_key"); // 清除某个全局变量 pm.globals.unset("variable_key"); // 发送请求 pm.sendRequest("https://postman-echo.com/get", function (err, response) { console.log(response.json()); }); // Javascript 获取变量类型 console.log( typeof pm.enviroment ); Pre-request Script 预处理脚本

发送请求之前往往需要准备数据,比如设置header中参数或者计算签名。

使用Pre-request Script可以编写一些准备数据。参考官方文档:Pre-request scripts

常用的准备工作有:

获取环境变量环境变量赋值发送一个请求拼接组合提交request请求所需要的参数,比如authentication code。

常用的语句如下:

// 获取环境变量 var v = pm.environment.get("variable_key"); // 获取全局变量 var gb = pm.globals.get("variable_key"); // 获取普通变量 var nm = pm.variables.get("variable_key"); // 设置环境变量 // 只能存储字符串,如果是对象的话则无法在下次运行时获取到内容 // 如需要存储JSON数据,可以用JSON.stringify(..)存储,再用JSON.parse(..)转化为对象使用 pm.environment.set("variable_key", variable_value); // 设置全局变量 pm.globals.set("variable_key", "variable_value"); // 清除某个环境变量 pm.environment.unset("variable_key"); // 清除某个全局变量 pm.globals.unset("variable_key"); // 发送请求 pm.sendRequest("https://postman-echo.com/get", function (err, response) { console.log(response.json()); }); // 获取毫秒级时间戳 var timestamp1 = Math.round(new Date().getTime()); // 获取秒级时间戳 var timestamp2 = Math.floor(new Date().getTime()/1000); // md5加密 // 获取环境变量password var tmp = pm.environment.get("password"); // 加密 var m = CryptoJS.MD5(tmp).toString(); // 加密后的值写入password pm.environment.set("password", m); // 设置一个1到4的随机整数,字段名是number,parselnt 是强制转换为整数 pm.globals.set("number",parseInt(4*Math.random())+1); 获取毫秒/秒级时间戳演示 在这里插入图片描述 在这里插入图片描述md5加密演示:

问题:一个登录接口,password需要md5加密后的值 则:在Pre-request Script中拿到环境变量中password的值,进行md5加密,再将加密后的值保存进password变量。 在这里插入图片描述 pre脚本执行后,可看到运行后的环境变量password已经是加密后的值 在这里插入图片描述 也可在postman console(点击左上角View - Show Postman Console或使用快捷键Alt+Ctrl+C)中查看Request Body 在这里插入图片描述 小结: 当postman的请求body或header中使用到了变量,有什么方法可以知道请求发送出去的实际值是什么?

通过运行后的环境变量查看通过postman console查看通过fiddler等抓包查看 Test Script 测试脚本

测试脚本是在request之后,对Response的返回值进行下一步处理的脚本

参加postman 官方:Test scripts 参加postman 官方:Test examples

常用的处理有:

接口断言,保证用例可回归接口返回值数据的处理可以对环境变量赋值读取response回复的数据,存为环境变量

常用的语句如下:

// 获取response headers中某一个值 ctype = postman.getResponseHeader("Content-Type"); // 获取response body的全部内容 text = pm.response.text(); // 获取response返回的全部JSON json_data = pm.response.json(); // 获取JSON中某一个值,比如name的值: var myName = json_data.name; // 检查一个JSON值 var data = JSON.parse(responseBody); tests["Your test name"] = data.value === 100; // XML转JSON var jsonObject = xml2Json(responseBody);

常用断言方法如下,更多详见postman官方:Test scripts:

断言响应时间

// 断言响应事件小于200ms pm.test("Response time is less than 200ms", function () { pm.expect(pm.response.responseTime).to.be.below(200); });

断言状态码

// 断言状态码200-202区间 pm.test("Successful POST request", function () { pm.expect(pm.response.code).to.be.oneOf([200,202]); }); // 断言状态码等于200 pm.test("Status code is 200", function () { pm.response.to.have.status(200); });

断言response的body中是否包含字符串

// 断言响应body中包含字符串:string_you_want_to_search 可替换为需要检验的内容 pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("string_you_want_to_search"); }); // 例:需要校验body是否包含"OK" pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("OK"); });

断言response的header中是否包含Content-Type

pm.test("Content-Type is present", function () { pm.response.to.have.header("Content-Type"); });

断言响应中的字段等于某个值

// 断言响应中"message" = ok" pm.test("message test", function () { var jsonData = pm.response.json(); pm.expect(jsonData["message"]).to.eql("ok"); });

断言响应中的字段不等于某个值

// 断言响应中"message" != bad" var jsonData = JSON.parse(responseBody); tests["message不为bad"] = jsonData["message"] != "bad";

断言响应中的列表长度

// 断言响应中"list"的字段长度 pm.test("data list test", function () { var jsonData = pm.response.json(); pm.expect(jsonData["data"].length).to.eql(41); });

断言响应中的列表中第几个元素的字段值

// 断言响应中"list 0的"的time字段的值 pm.test("data list 0 test", function () { var jsonData = pm.response.json(); pm.expect(jsonData["data"][0]["time"]).to.eql("2018-11-28 17:27:41"); }); Test Result 测试结果

除了上面的具体功能代码外,经常还需要返回一个结果,告诉Postman这个测试结果是Pass还是Fail,默认是pass。

这里返回值就不是简单的return语句可以,必须要通过Postman自带的对象或方法才可以,一般是通过pm.expect()或tests[]这两个地方返回测试结果。

完整的测试示范:

// 测试接口返回状态码是200: pm.test("Status code is 200", function () { pm.response.to.have.status(200); });

在这里插入图片描述 这些方法名看起来都很容易理解,一般都会叫pm.expect()或.to.be()或.to.have()这样的,字面意思就是期待什么或要求它必须是什么或必须有什么,才能通过测试。 另外,同样的测试结果,实际上还有更简单的写法,即不通过pm对象,而是内置tests对象。

常用操作如下:

// 反应时间必须少于200毫秒 tests["Response time is less than 200ms"] = responseTime < 200; // 判断反应代号是否等于某一个指定的代号 tests["Status code name has string"] = responseCode.name.has("Created");

看这个用法,猜测tests是一个JSON格式的对象,tests[…]括号内的字符串是测试的描述, =后面是判断语句,然后将True或False赋予为tests[…]的值,然后postman轮训所有tests对象里的参数,并返回pass与否的结果。

这里是官方总结的常用测试脚本方法:Test examples

以下是常用的返回测试结果的内置函数:

# “期待”返回结果必须包含某一段内容 pm.expect(从response里获取的字符串).to.include("必须包含的内容"); # 返回body值必须完全等于某一段内容 pm.response.to.have.body("必须等于的内容"); # 反应时间必须少于200毫秒 pm.expect(pm.response.responseTime).to.be.below(200); # 必须返回某一个状态 如"Created" pm.response.to.have.status("状态名"); Debugging 脚本调试

如果要看已经设置的Enviroment变量的话,可以点开右上方小眼睛看到,如下图,我设置了2个环境变量: 在这里插入图片描述 调试时要打印的话,一般都是用console.log(…),这样就能在console中看到:

如果你的Postman是Chrome app的话,直接在chrome浏览器的开发者工具里调试就行。如果是Mac等桌面软件,则需要打开内置的console才能看到调试信息。 位置在左下角,如下图: 在这里插入图片描述 postman console 页面如下图: 在这里插入图片描述 Postman Sandbox

Postman的Sandbox是Postman内部默认引入的第三方JS库。

参考:Postman Sandbox API reference 官方引用的脚本库详解

1.常用的库和工具

jQuery (Deprecated) Cross-platform JavaScript library. This will be removed in future versions of the sandbox.

Lodash JS utility library

BackboneJS (Deprecated) Provides simple models, views, and collections. This will be removed in future versions of the sandbox.

SugarJS Extends native JS objects with useful methods

tv4 JSON schema validator Validates JSON objects against v4 of the json-schema draft

CryptoJS standard and secure cryptographic algorithms. Supported algorithms: AES, DES, EvpKDF, HMAC-MD5, HMAC-SHA1/3/256/512, MD5, PBKDF2, Rabbit, SHA1/3/224/256/512, TripleDES

xml2Json(xmlString) This function behaves the same in Newman and Postman

xmlToJson(xmlString)(Deprecated) This function does NOT behave the same in Newman and Postman

postman.getResponseHeader(headerName) (Test-only) returns the response header with name “headerName”, if it exists. Returns null if no such header exists. Note: According to W3C specifications, header names are case-insensitive. This method takes care of this. postman.getResponseHeader(“Content-type”) and postman.getResponseHeader(“content-Type”) will return the same value.

生成MD5字符串:

var hashed = CryptoJS.MD5("待加密的字符串").toString();

文件转base64字符串:

s = 'Hello'; // 先转化成UTF-8编码的字符串 utf8 = CryptoJS.enc.Utf8.parse( s ); // 用CryptoJS第三方库(Postman已经内置了)进行编码 b64 = CryptoJS.enc.Base64.stringify(utf8) console.log(b64); // aGVsbG8= Postman SDK

不同于Sandbox,这是Postman内部较高级的SDK,可以引用一些方便的方法。 参考官网:Tutorial: Postman SDK Concepts

URL转换成JSON格式,并获取指定的参数值:

var sdk = require('postman-collection'); query = ( new sdk.Url(callback) ).toJSON().query; for (var i in query) { console.log(query[i].key +": "+ query[i].value); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3